﻿using System;
using System.Text;
using System.Web.Mvc;

namespace WebUI.HtmlHelpers
{
    public static class PagingHelpers
    {
        public static string PageLinks(this HtmlHelper html, int currentPage,
                                       int totalPages, Func<int, string> pageUrl)
        {
            var result = new StringBuilder();
            var next_page = "next→"; //Знак для ссылки на следующюю страницы
            var prev_page = "←prev"; //Знак для ссылки на предыдующюю страницы

            #region Навигация вперед-назад

            result.AppendLine("<div class=\"pager-pn-\">");

            var tagPrev = new TagBuilder("a");
            if (currentPage != 1)
            {
                tagPrev.MergeAttribute("href", pageUrl(currentPage - 1));
                tagPrev.InnerHtml =  prev_page;
                result.AppendLine(tagPrev.ToString());
            }

            var tagSpanPrev = new TagBuilder("span");
            if (currentPage == 1)
            {
                tagSpanPrev.InnerHtml = prev_page;
                result.AppendLine(tagSpanPrev.ToString());
            }

            var tagNext = new TagBuilder("a");
            if (currentPage != totalPages)
            {
                tagNext.MergeAttribute("href", pageUrl(currentPage + 1));
                tagNext.InnerHtml = next_page;
                result.AppendLine(tagNext.ToString());
                result.AppendLine("<br />");
            }

            var tagSpanNext = new TagBuilder("span");
            if (currentPage == totalPages)
            {
                tagSpanNext.InnerHtml = next_page;
                result.AppendLine(tagSpanNext.ToString());
                result.AppendLine("<br />");
            }

            result.AppendLine("</div>");
            #endregion

            #region Постраничная навигация
            bool stopFirst = false;

            result.AppendLine("<div class=\"pager-list\">");
            for (int i = 1; i <= totalPages; i++)
            {
                if (totalPages <= 7)
                {
                    var tag = new TagBuilder("a");
                    tag.MergeAttribute("href", pageUrl(i));
                    tag.InnerHtml = i.ToString();
                    if (i == currentPage)
                        tag.AddCssClass("selectedPage");
                    result.AppendLine(tag.ToString());
                }

                if(totalPages > 7)
                {
                    if (currentPage > 4 && stopFirst == false)
                    {
                        stopFirst = true;
                        var tag = new TagBuilder("a");
                        tag.MergeAttribute("href", pageUrl(i));
                        tag.InnerHtml = "Первая";
                        result.AppendLine(tag.ToString());
                    }

                    if (i >= currentPage - 3 &&  
                        i <= currentPage + 3)
                    {
                        var tag = new TagBuilder("a");
                        tag.MergeAttribute("href", pageUrl(i));
                        tag.InnerHtml = i.ToString();
                        if (i == currentPage)
                            tag.AddCssClass("selectedPage");
                        result.AppendLine(tag.ToString());
                    }

                    if (i == totalPages && currentPage < totalPages - 3)
                    {
                        var tag = new TagBuilder("a");
                        tag.MergeAttribute("href", pageUrl(i));
                        tag.InnerHtml = "Последняя";
                        result.AppendLine(tag.ToString());

                    }
                }

            }

            result.AppendLine("</div>");
            return result.ToString();
        }
        #endregion
    }
}